Electron 进程间通信

Electron 应用中有两种进程:主进程和渲染进程,它们之间不能直接共享数据。

进程间通信(IPC)是一种在不同进程之间传递消息的机制,可以用来实现数据交换和功能调用。

Electron 提供了 ipcMain 和 ipcRenderer 模块来实现 IPC,它们分别运行在主进程和渲染进程中。

ipcMain 和 ipcRenderer 模块都有 send 和 on 方法,可以用来发送和监听异步消息;也有 invoke 和 handle 方法,可以用来发送和处理同步消息。

使用 IPC 时要注意避免循环依赖、内存泄漏、性能损耗等问题。


使用 remote 模块:渲染器进程调用主进程

具体参见:Electron remote 模块


使用 webContents.send():主进程向渲染器进程发送

主进程:

const openFile = (file) => {
	const content = fs.readFileSync(file).toString();
	mainWindow.webContents.send('file-opened', file, content);
}

渲染器继承中,使用 ipcRenderer 接收:

const { ipcRenderer } = require('electron');
ipcRenderer.on('file-opened', (event, file, content) => {
	markdownView.value = content;
	renderMarkdownToHtml(content);
});

渲染进程到主进程

渲染进程:

const setButton = document.getElementById('btn')
const titleInput = document.getElementById('title')
setButton.addEventListener('click', () => {
    const title = titleInput.value
    window.electronAPI.setTitle(title)
});

Electron preload.js:

const { contextBridge, ipcRenderer } = require('electron')

contextBridge.exposeInMainWorld('electronAPI', {
    setTitle: (title) => ipcRenderer.send('set-title', title)
})

main.js:

const { contextBridge, ipcRenderer } = require('electron')

contextBridge.exposeInMainWorld('electronAPI', {
    setTitle: (title) => ipcRenderer.send('set-title', title)
})

网络资源

进程间通信 | Electron (electronjs.org)


本文作者:Maeiee

本文链接:Electron 进程间通信

版权声明:如无特别声明,本文即为原创文章,版权归 Maeiee 所有,未经允许不得转载!


喜欢我文章的朋友请随缘打赏,鼓励我创作更多更好的作品!